package control;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.richfaces.event.ItemChangeEvent;

import service.ProjetoService;
import util.UsuarioLogado;
import entity.Projeto;

@Named
@SessionScoped
public class MenuControl implements Serializable  {
	private static final long serialVersionUID = 6588076934672518987L;
	private Long idProjetoSelecionado;
	private List<Projeto> projetos;
	private String itemMenuSelecionado;
	
	@EJB
	private ProjetoService service;
	
	@Inject
	private UsuarioLogado usuario;
	
	@PostConstruct
	public void inicializar() {
		projetos = service.listarProjetosPorRecurso(usuario.getRecursoLogado().getIdRecurso());
		if (!projetos.isEmpty()) {
			idProjetoSelecionado = projetos.get(0).getId();
		}
	}
	
	private Projeto obterProjeto() {
		if (idProjetoSelecionado == null && !projetos.isEmpty()) {
			idProjetoSelecionado = projetos.get(0).getId();
		}
		
		if (getIdProjetoSelecionado() != null && getIdProjetoSelecionado() != 0) {
			return service.obterProjeto(getIdProjetoSelecionado());			
		}
		
		return null;
	}
	
	public Boolean getExibirPlanejarFases() {
		Projeto projeto = obterProjeto();
		return projeto != null && (projeto.podeSerPlanejado() && projeto.ehOGerente(usuario.getRecursoLogado()));
	}
	
	public Boolean getExibirOpcoesGerente() {
		Projeto projeto = obterProjeto();
		return projeto != null && projeto.ehOGerente(usuario.getRecursoLogado());
	}
	
	public Boolean getExibirPlanejarIteracao() {
		Projeto projeto = obterProjeto();
		return projeto != null && (projeto.possuiIteracaoASerPlanejada() && projeto.ehOGerente(usuario.getRecursoLogado()));
	}
	
	public void setItemMenuSelecionado(String itemMenuSelecionado) {
		this.itemMenuSelecionado = itemMenuSelecionado;
	}

	public String getItemMenuSelecionado() {
		return itemMenuSelecionado;
	}
	
	public void selecionar(ItemChangeEvent event) {
		this.itemMenuSelecionado = event.getNewItemName();
	}
	
	public void selecionarProjeto(ValueChangeEvent event) {
		this.idProjetoSelecionado = (Long) event.getNewValue();
		
		FacesContext fc = FacesContext.getCurrentInstance();
		fc.getApplication().getNavigationHandler().handleNavigation(fc, null, "/pages/inicial");
	}
	
	public List<Projeto> getProjetos() {
		return service.listarProjetosPorRecurso(usuario.getRecursoLogado().getIdRecurso());
	}

	public Long getIdProjetoSelecionado() {
		return idProjetoSelecionado;
	}

	public void setIdProjetoSelecionado(Long projetoSelecionado) {
		this.idProjetoSelecionado = projetoSelecionado;
	}
	
	//TODO veririfcar esse método
	public String sair(){

		try{
			HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
			HttpServletResponse response = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
			request.logout();
			request.getSession().invalidate();
			//
		//	request.getRequestDispatcher("./pages/inicial.jsf"). forward(request, response);
			
			//FacesContext.getCurrentInstance().responseComplete();
			
			
			
		}catch (Exception e) {
			e.printStackTrace();	

		}
		
		return "/pages/inicial.jsf?faces-redirect=true";
	}

	public String getNomeProjetoSelecionado() {
		Projeto projeto = obterProjeto();
		return projeto.getNome();
	}

	public UsuarioLogado getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioLogado usuario) {
		this.usuario = usuario;
	}

	public void setProjetos(List<Projeto> projetos) {
		this.projetos = projetos;
	}
}